package DBLayer;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import ModelLayer.*;

/**
 * 
 * @author DMAA0213 - Gruppe 2
 *
 */
public class DBLokalitet implements IFDBLokalitet {
	private Connection con;

	/**
	 * Constructor for DBLokalitet objekt, uden parametre.
	 * Her startes DBConnection, hvis denne ikke i forevejen er aktiv. 
	 * @throws SQLException Kaster SQLException hvis der er fejl i connection.
	 */
	public DBLokalitet() throws SQLException {
		try {
			con = DBConnection.getInstance().getDBcon();
		}
		catch (SQLException e) {
			throw e;
		}
	}


	@Override
	public ArrayList<Lokalitet> hentListe() throws SQLException {
		ArrayList<Lokalitet> arrayListLokalitet = new ArrayList<Lokalitet>();

		Lokalitet l = null;
		String query = "SELECT id, navn, beskrivelse" + " FROM Lokalitet";
		ResultSet result = null;
		try {
			PreparedStatement ps = con.prepareStatement(query);
			result = ps.executeQuery();
			while (result.next()) {
				l = buildLokalitet(result);
				arrayListLokalitet.add(l);
			}
		} catch (SQLException e) {
			throw e;
		}
		return arrayListLokalitet;
	}

	
	private Lokalitet buildLokalitet(ResultSet result) throws SQLException {
		Lokalitet lokObj = new Lokalitet();
		try {
			lokObj.setId(result.getInt("id"));
			lokObj.setNavn(result.getString("navn"));
			lokObj.setBeskrivelse(result.getString("beskrivelse"));

		} catch (SQLException e) {
			System.out.println("error in building the Lokalitet object");
			throw e;
		}
		return lokObj;

	}

	
	@Override
	public Lokalitet hent(int id) throws SQLException {
		try {
			String query = "SELECT id, navn, beskrivelse"
					+ " FROM Lokalitet WHERE id=?";
			PreparedStatement ps = con.prepareStatement(query);
			ps.setInt(1, id);
			ResultSet result = ps.executeQuery();
			if (result.next()) {
				return buildLokalitet(result);
			} else {
				return null;
			}
		} catch (SQLException e) {
			throw e;
		}
	}
}
